- R
- RStudio
- Estructuración del trabajo en R
- Uso de proyectos en Rstudio
- packrat
- Organización de proyectos en sistemas de directorios
- Rutas relativas
- Guía de estilo R
- Herramientas para compartir y acceder a información
- Dropbox
- GoogleSheets
- Figshare
5 de junio de 2017
R se basa en scripts en lugar de menús.
package de forma libre.Bibliografía: Grant (2016)
https://rviews.rstudio.com/2016/10/12/interview-with-j-j-allaire/
ggplot2, dplyr, tidyr, lubridate, stringr,…) y herramientas como RMarkdown o Shiny.
Source: creación scripts de R con resaltado de sintaxis
Console. Environment
View. History. Files
Plot: ventana para gráficos
Plot Viewer: ventana para gráficos interactivos
Help: ayuda integrada de R (comando ?)
Help: ayuda integrada de R
Cheatsheets: hojas de trucos ;)
RStudio Cheatsheet
Packages
Tab: opciones, finalización de código
Tab: opciones, finalización de código
Tab: opciones, finalización de código
Atajos de teclado: cmd+Enter, shift+up,…
Folders
Folders
Folders
Folders
La investigación reproducible proporciona al investigador:
(Gandrud 2015)
El uso de proyectos en RStudio tiene 5 ventajas fundamentales:
Packrat es un sistema de gestión de dependencias
Packrat trata de resolver problemas con paquetes, dependencias y versiones, haciendo los proyectos:
Cómo trabaja Packrat?
El manejo cuidadoso de archivos es crucial para la investigación reproducible.
Hay que tener un plan para organizar, almacenar y compartir los archivos.
Gandrud (2015)
La falta de organización en el espacio de trabajo es una fuente potencial de errores. Por tanto, un factor a evitar en nuesto trabajo.
… la organización lleva su tiempo.
Principios básicos:
xkcd.com/1179
xkcd.com/1179
if(!dir.exists("datos")){
dir.create("datos")
}
dir.create("datos/brutos")
dir.create("datos/procesados")
Existen dos estilos de rutas, Mac/Linux y Windows, cuyas diferencias básicamente en:
R puede trabajar con los dos pero, desafortunadamente, backslash tiene un significado especial para R y hay que duplicarlos (p.e. datos\\datos_brutos).
Recomendación: siempre slashes.
Grolemund and Wickham (2016)
Recomendación: Nunca deberíamos utilizar rutas absolutas porque dificulta el intercambio de proyectos.
Grolemund and Wickham (2016)
Si se distribuye código con directorios referenciados de forma relativa funcionará siempre.
read.table("../datos/brutos/datos_perinatal_2015.txt", sep=";", header=T)
setwd("./informes/rmarkdown")
setwd("~/Dropbox")
Jaffe and Leek (2016)
Funciones útiles:
getwd()
# [1] "/home/carlos/Documentos/GitHub/curso_inv_rep/sesion_02_rstudio"
path.expand("~")
# [1] "/home/carlos"
file.path("~", "Dropbox")
# [1] "~/Dropbox"
Funciones útiles:
path.expand( file.path( "~", "Dropbox"))
# [1] "/home/carlos/Dropbox"
En el servidor Linux, el resultado es:
# [1] "/home/jordi/Dropbox"
Y en Windows:
# [1] "C:/Users/Jordi/Documentos/Dropbox"
Un buen estilo de escribir código es como utilizar correctamente los signos de puntuación. Puedes escribir sin ellos pero facilita la compresión.
Wickham (2014)
Cuando se colabora en un proyecto, un código tiene muchos autores y lectores. En estos casos es muy útil tener un estilo claro y bien definido, y a ser posible, común.
geekandpoke.typepad.com
Principios básicos:
(Karl Broman 2016; Wilson et al. 2014)
Funciones
Comentarios
Propuesta extraída de Advanced R de Hadley Wickham.
Disponible en Amazon (por 78.5€) o libre en su web (Wickham 2014)
La propuesta está basada en la Guía de estilo de R elaborada por usuarios de Google (Google 2014)
Chief Scientist at RStudio, and an Adjunct Professor of Statistics at the University of Auckland, Stanford University, and Rice University.
Nombres de archivos
temp1
temp2
fv
nms
Nombres de archivos
funciones-proyecto.R
modelos-ajustados.R
cosas.r
informe.r
0-datos.R.
1-descriptivo.R
2-analisis.R
Nombres de objetos
_
periodo_1
periodo_uno
primer_periodo_del_ensayo
PeriodoUno
periodouno
ppde
Nombres de objetos
T <- FALSE
c <- 10
mean <- function(x) sum(x)
total y totals, Mat y mat, g y ggEspaciado
Dejar siempre un espacio alrededor de todos los operadores ( = + - <- …) y después de una coma (y nunca, antes).
# Bien media <- mean(feet / 12 + inches, na.rm = TRUE) # Mal media<-mean(feet/12+inches,na.rm=TRUE)
Con una excepción, no dejar espacios alrededor de : y ::
# Bien x <- 1:10 maptools::kmlPolygon() # Mal x <- 1 : 10 maptools :: kmlPolygon()
Espaciado
Dejar un espacio a la izquierda de los paréntesis excepto en llamadas de funciones
# Bien if (debug) do(x) plot(x, y) # Mal if(debug)do(x) plot (x, y)
Espacios extra si ayuda a alinear signos = o asignaciones <-
list( total = a + b + c, mean = (a + b + c) / n )
Espaciado
No dejar espacios alrededor de código entre paréntesis o corchetes (a menos que haya una coma)
# Bien if (debug) do(x) diamonds[5, ] # Mal if ( debug ) do(x) # No necesita espacios alrededor de debug x[1,] # Necesita un espacio después de la coma x[1 ,] # El espacio va después de la coma, no antes.
Llaves
Una llave nunca se abre en su propia línea y debe ir siempre seguida de una nueva línea. Una llave se cierra siempre en una nueva línea, a menos que vaya seguida de un else. Siempre sangrar el código entre llaves.
# Bien
if (y == 0) {
log(x)
} else {
y ^ x
}
# Mal
if (y == 0) {
log(x)
}
else {
y ^ x
}
Logitud de las líneas
Limitar el código a 80 caracteres por línea. Esta anchura se adapta cómodamente a una página impresa con una fuente de tamaño razonable.
Sangría
La sangría se limita a dos espacios. Nunca utilizar tabuladores.
La única excepción es en la definición de una función cuando ocupa varias líneas. En ese caso debe añadirse espacios la segunda línea hasta donde empieza la definición de argumentos:
funcion_con_nombre_largo <- function(a = "un primer argumento largo",
b = "otro argumento largo",
c = "y otro más")
# el código en general sangrado 2 espacios.
}
read.table()
Lee un fichero en formato tabla y crea un data.frame a partir de él. Los casos corresponden a las filas y las variables a las columnas.
read.table( file, # filename header = FALSE, # are there column names? sep = "", # what separates columns? as.is = !stringsAsFactors, # do you want character strings as factors or characters? quote = "\"'", dec = ".", row.names, col.names, na.strings = "NA", nrows = ‐1, skip = 0, check.names = TRUE, fill = !blank.lines.skip, strip.white = FALSE, blank.lines.skip = TRUE, comment.char = "#", stringsAsFactors = default.stringsAsFactors())
read.table("file.txt", header = TRUE, sep="\t", as.is=TRUE)`
Notemos que el filename puede ser una ruta a un fichero en una web (e.g. 'www.algunaurl.com/tabla1.txt') (Jaffe 2016)
readr
Read Rectangular Text Data
xlsx, readxl
Read/write xls/xlsx. Import excel files into R
foreign
Read Data Stored by Minitab, S, SAS, SPSS, Stata, Systat, Weka, dBase, …
haven
Import and Export 'SPSS', 'Stata' and 'SAS' Files
RODBC
ODBC Database Access
pxR
PC-Axis with R. Provides a set of functions for reading and writing PCAxis files, used by different statistical organizations around the globe for data dissemination.
download.file
Descargas de datos de la web. Ejemplo: Banco de España. Series temporales cuadros de Cuentas Financieras:
fileUrl <- "http://www.bde.es/webbde/es/estadis/ccff/csvs/cf.zip"
download.file(fileUrl,
destfile="./data/cf.zip")
list.files("./data")
dateDownloaded <- date()
dateDownloaded
El package rdrop2 de Karthik Ram reemplaza a rDrop.
En primer lugar, debes autenticarte:
tras permitir:
Tras identificarse, las funciones deseables:
Crear una carpeta en Dropbox: drop_create('drop_test')
Subir un fichero a Dropbox: drop_upload('mtcars.csv')
Descargar un fichero a Dropbox: drop_get('mtcars.csv')
Borrar un fichero de Dropbox: drop_delete('mtcars.csv')
Mover un fichero en Dropbox: drop_move("mtcars.csv", "new_folder/mtcars.csv")
Copiar un fichero en Dropbox: drop_copy("new_folder/mtcars.csv", "new_folder2/mtcars.csv")
Buscar un fichero en Dropbox: drop_search('gif')
El package googlesheets de Jennifer Bryan y Joanna Zhao permite importar y exportar hojas de cálculo desde una app de Shiny o desde nuestro pc, crearlas o eliminarlas (completa o parcialmente).
Por qué utilizar googlesheets? (Bryan 2015)
figshare es un repositorio abierto donde los usuarios pueden hacer que todos sus resultados de investigación estén disponibles de una manera citable, compartible y comprobable.
Se pueden almacenar archivos de todo tipo.
fileUrl <- "https://ndownloader.figshare.com/files/8455721" download.file(fileUrl, destfile="./data/datos_practicas.RData") dateDownloaded <- date()
Los usuarios de Windows debéis añadir a download.file la opción mode="wb"
Broman, K. 2016. Tools for reproducible research. Organizing projects; exploratory data analysis. http://kbroman.org/Tools4RR/.
Broman, Karl. 2016. Tools for reproducible research. Writing clear code. http://kbroman.org/Tools4RR/.
Bryan, Jennifer. 2015. Fun times with R and Google Sheets. UseR! 2015. https://speakerdeck.com/jennybc/googlesheets-talk-at-user2015.
Gandrud, Christopher. 2015. Reproducible Research with R and Rstudio, 2nd Edition. Chapman; Hall/CRC.
Google, R user community at. 2014. Google’s R Style Guide. https://google.github.io/styleguide/Rguide.xml.
Grant, Barry. 2016. R. https://bioboot.github.io/web-2016/class-material/slides_day3-1_R.pdf.
Grolemund, Garrett, and Hadley Wickham. 2016. R for Data Science. O’Reilly. http://r4ds.had.co.nz/.
Hornik, Kurt. 2008. The R Faq: Why Is R Named R? https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-is-R-named-R_003f.
Jaffe, Andrew. 2016. SISBID: Module 1 Big Data Wrangling in R. Data I/O + Structure. http://sisbid.github.io/Module1/.
Jaffe, Andrew, and Jeff Leek. 2016. SISBID: Module 1 Big Data Wrangling in R. Reproducible Research And Version Control. http://sisbid.github.io/Module1/.
Wickham, Hadley. 2014. Advanced R. Chapman & Hall/CRC. http://adv-r.had.co.nz/.
Wilson, G., DA. Aruliah, CT. Brown, NP Chue Hong, M. Davis, and RT et al. Guy. 2014. “Best Practices for Scientific Computing.” PLoS Biol 1 (12): e1001745. doi:10.1371/journal.pbio.1001745.